文档上传(File Uploads)

TODO: Normalize/expand this section

例子

产生一个 api

首先,我们需要替 serving/storing 产生一个新的 api 文档。用 sails 命令行工具执行此动作。


dude@littleDude:~/node/myApp$ sails generate api file

debug: Generated a new controller `file` at api/controllers/FileController.js!
debug: Generated a new model `File` at api/models/File.js!

info: REST API generated @ http://localhost:1337/file
info: and will be available the next time you run `sails lift`.

dude@littleDude:~/node/myApp$

撰写控制器动作

让我们建立一个 index 动作来开始文档上传及 upload 动作来接收文档。


// myApp/api/controllers/FileController.js

module.exports = {

  index: function (req,res){

    res.writeHead(200, {'content-type': 'text/html'});
    res.end(
    '<form action="http://localhost:1337/file/upload" enctype="multipart/form-data" method="post">'+
    '<input type="text" name="title"><br>'+
    '<input type="file" name="avatar" multiple="multiple"><br>'+
    '<input type="submit" value="Upload">'+
    '</form>'
    )
  },
  upload: function  (req, res) {
    req.file('avatar').upload(function (err, files) {
      if (err)
        return res.serverError(err);

      return res.json({
        message: files.length + ' file(s) uploaded successfully!',
        files: files
      });
    });
  }

};

它们去哪了?

使用默认的 receiver,上传的文档会在 myApp/.tmp/uploads/ 目录。你可以在 upload 动作内做你想做的任何事情。

上传到自定义文件夹

在上面的例子中,我们可以将文档上传到 .tmp/uploads。那么我们该如何设置为自定义文件夹,例如 assets/images。我们可以通过增加选项到上传功能来实现这一目标,如下所示:


  var uploadPath = './assets/images';
  uploadFile.upload({ dirname: uploadPath },function onUploadComplete (err, files) {             

      if (err) 
        return res.serverError(err);

      return res.json({
        message: files.length + ' file(s) uploaded successfully!',
        path:uploadPath
        file:files
      });
  });

请查看 Skipper 文件取得更多资讯及其他可用的 receivers 清单!